﻿using System;
using System.Collections.Generic;
using System.Linq;
using UygulamaTakbisService.wsTakbisServis;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Diagnostics;

namespace UygulamaTakbisService
{
    public class GercekKisiBilgiDao : IDisposable
    {
        TAKBISWebService takbisServis = new TAKBISWebService();

        public GercekKisiBilgi GetirGercekKisiBilgiIDDen(decimal gercekKisiID, long kullaniciID)
        {
            GercekKisiBilgi gercekKisiBilgi = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    gercekKisiBilgi = takbisServis.GetirGercekKisiBilgiIDDen(gercekKisiID);
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    if (gercekKisiBilgi != null)
                    {
                        stopwatch2.Start();
                        bool sonuc = GercekKisiBilgiKaydet(gercekKisiBilgi);
                        stopwatch2.Stop();
                    }
                    else
                        gercekKisiBilgi = null;

                    logDao.TakbisBilgiSorguLogKaydet("GetirGercekKisiBilgiIDDen", null, gercekKisiBilgi, gercekKisiID.ToString(), Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return gercekKisiBilgi;
        }

        public List<GercekKisiBilgi> GetirGercekKisiBilgi(SorguTip sorguTip, string ad, string soyad, string tcKimlikNo, string anaAd, string babaAd, Cinsiyet cinsiyet, string dogumyeri, int? dogumGun, int? dogumAy, int? dogumYil, TapuBolumDurum tapuBolumDurum, BolgeTip bolgeTip, decimal bolgeID, TasinmazTip tasinmazTip, long kullaniciID)
        {
            List<GercekKisiBilgi> gercekKisiBilgiList = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    gercekKisiBilgiList = takbisServis.GetirGercekKisiBilgi(sorguTip, ad, soyad, tcKimlikNo, anaAd, babaAd, cinsiyet, dogumyeri, dogumGun, dogumAy, dogumYil, tapuBolumDurum, bolgeTip, bolgeID, tasinmazTip).ToList();
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    if (gercekKisiBilgiList != null && gercekKisiBilgiList.Count != 0)
                    {
                        stopwatch2.Start();
                        foreach (GercekKisiBilgi gercekKisiBilgi in gercekKisiBilgiList)
                        {
                            bool sonuc = GercekKisiBilgiKaydet(gercekKisiBilgi);
                        }
                        stopwatch2.Stop();
                    }
                    else
                        gercekKisiBilgiList = null;
                    logDao.TakbisBilgiSorguLogKaydet("GetirGercekKisiBilgi", null, gercekKisiBilgiList, "SorguTip = " + sorguTip.ToString() + ", Ad = " + ad + ", Soyad = " + soyad + ", TcKimlikNo = " + tcKimlikNo + ", AnaAd = " + anaAd + ", BabaAd = " + babaAd + ", Cinsiyet = " + cinsiyet.ToString() + ", DoğumYeri = " + dogumyeri + ", DoğumGün = " + dogumGun.ToString() + ", DoğumAy = " + dogumAy.ToString() + ", DoğumYıl = " + dogumYil.ToString() + ", TapuBolumDurum = " + tapuBolumDurum.ToString() + ", BölgeTip = " + bolgeTip.ToString() + ", BölgeID = " + bolgeID.ToString() + ", TaşınmazTip = " + tasinmazTip.ToString(), Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return gercekKisiBilgiList;
        }

        public GercekKisiBilgi GetirGercekKisiBilgiYabanciBilgisiIleIDDen(decimal gercekKisiID, long kullaniciID)
        {
            GercekKisiBilgi gercekKisiBilgi = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    gercekKisiBilgi = takbisServis.GetirGercekKisiBilgiYabanciBilgisiIleIDDen(gercekKisiID);
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    stopwatch2.Start();
                    bool gercekKisiBilgiKayitEdildiMi = GercekKisiBilgiKaydet(gercekKisiBilgi);

                    if (gercekKisiBilgiKayitEdildiMi)
                    {
                        if (gercekKisiBilgi.GercekKisiVatandaslikList != null)
                        {
                            foreach (GercekKisiVatandaslik gercekKisiVatandaslik in gercekKisiBilgi.GercekKisiVatandaslikList)
                            {
                                bool gercekKisiVatandaslikKayitEdildiMi = GercekKisiVatandaslikKaydet(gercekKisiVatandaslik);

                                if (gercekKisiVatandaslikKayitEdildiMi)
                                {
                                    if (gercekKisiVatandaslik.TurkAsilliMiBelgeBilgi != null)
                                    {
                                        using (BelgeBilgiDao belgeBilgiDao = new BelgeBilgiDao())
                                        {
                                            bool TurkAsilliMiBelgeBilgiKayitEdildiMi = belgeBilgiDao.BelgeBilgiKaydet(gercekKisiVatandaslik.TurkAsilliMiBelgeBilgi);
                                        }
                                    }

                                    if (gercekKisiVatandaslik.KanunaTabiMiBelgeBilgi != null)
                                    {
                                        using (BelgeBilgiDao belgeBilgiDao = new BelgeBilgiDao())
                                        {
                                            bool kanunaTabiMiBelgeBilgiKayitEdildiMi = belgeBilgiDao.BelgeBilgiKaydet(gercekKisiVatandaslik.KanunaTabiMiBelgeBilgi);
                                        }
                                    }

                                    if (gercekKisiVatandaslik.Ulke != null)
                                    {
                                        using (IdariBirimDao idariBirimDao = new IdariBirimDao())
                                        {
                                            if (!idariBirimDao.UlkeBilgiKayitliMi(gercekKisiVatandaslik.Ulke))
                                            {
                                                bool ulkeBilgiKayitEdildiMi = idariBirimDao.UlkeBilgiKaydet(gercekKisiVatandaslik.Ulke);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    stopwatch2.Stop();
                    logDao.TakbisBilgiSorguLogKaydet("GetirGercekKisiBilgiYabanciBilgisiIleIDDen", null, gercekKisiBilgi, gercekKisiID.ToString(), Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return gercekKisiBilgi;
        }

        public bool GercekKisiBilgiKaydet(GercekKisiBilgi gercekKisiBilgi)
        {
            bool sonuc;
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    SqlTransaction transaction = con.BeginTransaction("trans");
                    try
                    {
                        cmd.CommandText = @"INSERT INTO GercekKisiBilgi with(updlock) (GercekKisiBilgiID,TCKimlikNo,Ad,Soyad,BabaAd,AnaAd,DogumTarih,DogumYer,Cinsiyet,OlumTarih,AktifMi,KayitTarih) VALUES (@GercekKisiBilgiID,@TCKimlikNo,@Ad,@Soyad,@BabaAd,@AnaAd,@DogumTarih,@DogumYer,@Cinsiyet,@OlumTarih,@AktifMi,getdate())";

                        if (gercekKisiBilgi.GercekKisiBilgiID != null)
                            cmd.Parameters.Add("@GercekKisiBilgiID", gercekKisiBilgi.GercekKisiBilgiID);
                        else
                            cmd.Parameters.Add("@GercekKisiBilgiID", DBNull.Value);

                        if (gercekKisiBilgi.TCKimlikNo != null)
                            cmd.Parameters.Add("@TCKimlikNo", gercekKisiBilgi.TCKimlikNo);
                        else
                            cmd.Parameters.Add("@TCKimlikNo", DBNull.Value);

                        if (gercekKisiBilgi.Ad != null)
                            cmd.Parameters.Add("@Ad", gercekKisiBilgi.Ad);
                        else
                            cmd.Parameters.Add("@Ad", DBNull.Value);

                        if (gercekKisiBilgi.Soyad != null)
                            cmd.Parameters.Add("@Soyad", gercekKisiBilgi.Soyad);
                        else
                            cmd.Parameters.Add("@Soyad", DBNull.Value);

                        if (gercekKisiBilgi.BabaAd != null)
                            cmd.Parameters.Add("@BabaAd", gercekKisiBilgi.BabaAd);
                        else
                            cmd.Parameters.Add("@BabaAd", DBNull.Value);

                        if (gercekKisiBilgi.AnaAd != null)
                            cmd.Parameters.Add("@AnaAd", gercekKisiBilgi.AnaAd);
                        else
                            cmd.Parameters.Add("@AnaAd", DBNull.Value);

                        if (gercekKisiBilgi.DogumTarih != null)
                            cmd.Parameters.Add("@DogumTarih", gercekKisiBilgi.DogumTarih);
                        else
                            cmd.Parameters.Add("@DogumTarih", DBNull.Value);

                        if (gercekKisiBilgi.DogumYer != null)
                            cmd.Parameters.Add("@DogumYer", gercekKisiBilgi.DogumYer);
                        else
                            cmd.Parameters.Add("@DogumYer", DBNull.Value);

                        if (gercekKisiBilgi.Cinsiyet != null)
                            cmd.Parameters.Add("@Cinsiyet", gercekKisiBilgi.Cinsiyet);
                        else
                            cmd.Parameters.Add("@Cinsiyet", DBNull.Value);

                        if (gercekKisiBilgi.OlumTarih != null)
                            cmd.Parameters.Add("@OlumTarih", gercekKisiBilgi.OlumTarih);
                        else
                            cmd.Parameters.Add("@OlumTarih", DBNull.Value);

                        if (gercekKisiBilgi.AktifMi != null)
                            cmd.Parameters.Add("@AktifMi", (byte)gercekKisiBilgi.AktifMi);
                        else
                            cmd.Parameters.Add("@AktifMi", DBNull.Value);

                        cmd.Connection = con;
                        cmd.Transaction = transaction;
                        cmd.ExecuteScalar();
                        transaction.Commit();
                        sonuc = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        sonuc = false;
                        using (ExceptionLogDao el = new ExceptionLogDao())
                        {
                            el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                        }
                    }
                    finally
                    {
                        con.Close();
                        con.Dispose();
                        cmd.Dispose();
                    }
                    return sonuc;
                }
            }
        }

        public bool GercekKisiBilgiKayitliMi(decimal gercekKisiBilgiID)
        {
            bool sonuc = false;
            try
            {
                using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
                {
                    string sql = string.Format(@"SELECT * FROM GercekKisiBilgi with(nolock) WHERE GercekKisiBilgiID = {0} Order by KayitTarih Desc ", gercekKisiBilgiID);
                    using (SqlCommand cmd = new SqlCommand(sql))
                    {
                        using (SqlDataAdapter sda = new SqlDataAdapter())
                        {
                            cmd.Connection = con;
                            sda.SelectCommand = cmd;
                            cmd.CommandTimeout = 60000;
                            DataTable dt = new DataTable();
                            sda.Fill(dt);
                            if (dt.Rows.Count >= 1)
                                sonuc = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return sonuc;
        }

        public bool GercekKisiVatandaslikKaydet(GercekKisiVatandaslik gercekKisiVatandaslik)
        {
            bool sonuc;
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    SqlTransaction transaction = con.BeginTransaction("trans");
                    try
                    {
                        cmd.CommandText = @"INSERT INTO GerekKisiVatandaslik with(updlock) (GercekKisiVatandaslikID,VatandaslikTip,KanunaTabiMi,KanunaTabiMiBelgeBilgiRef,TurkAsilliMi,TurkAsilliMiBelgeBilgiRef,VatandaslikAciklama,UlkeRef,MusadereKarariVarMi,AktifMi,KayitTarih) VALUES (@GercekKisiVatandaslikID,@VatandaslikTip,@KanunaTabiMi,@KanunaTabiMiBelgeBilgiRef,@TurkAsilliMi,@TurkAsilliMiBelgeBilgiRef,@VatandaslikAciklama,@UlkeRef,@MusadereKarariVarMi,@AktifMi,getdate())";

                        if (gercekKisiVatandaslik.GercekKisiVatandaslikID != null)
                            cmd.Parameters.Add("@GercekKisiVatandaslikID", gercekKisiVatandaslik.GercekKisiVatandaslikID);
                        else
                            cmd.Parameters.Add("@GercekKisiVatandaslikID", DBNull.Value);

                        if (gercekKisiVatandaslik.VatandaslikTip != null)
                            cmd.Parameters.Add("@VatandaslikTip", gercekKisiVatandaslik.VatandaslikTip);
                        else
                            cmd.Parameters.Add("@VatandaslikTip", DBNull.Value);

                        if (gercekKisiVatandaslik.KanunaTabimi != null)
                            cmd.Parameters.Add("@KanunaTabiMi", gercekKisiVatandaslik.KanunaTabimi);
                        else
                            cmd.Parameters.Add("@KanunaTabiMi", DBNull.Value);

                        if (gercekKisiVatandaslik.KanunaTabiMiBelgeBilgi != null)
                            cmd.Parameters.Add("@KanunaTabiMiBelgeBilgiID", gercekKisiVatandaslik.KanunaTabiMiBelgeBilgi.BelgeID);
                        else
                            cmd.Parameters.Add("@KanunaTabiMiBelgeBilgiID", DBNull.Value);

                        if (gercekKisiVatandaslik.TurkAsillimi != null)
                            cmd.Parameters.Add("@TurkAsilliMi", gercekKisiVatandaslik.TurkAsillimi);
                        else
                            cmd.Parameters.Add("@TurkAsilliMi", DBNull.Value);

                        if (gercekKisiVatandaslik.TurkAsilliMiBelgeBilgi != null)
                            cmd.Parameters.Add("@KanunaTabiMiBelgeBilgiID", gercekKisiVatandaslik.TurkAsilliMiBelgeBilgi.BelgeID);
                        else
                            cmd.Parameters.Add("@KanunaTabiMiBelgeBilgiID", DBNull.Value);

                        if (gercekKisiVatandaslik.VatandaslikAciklama != null)
                            cmd.Parameters.Add("@VatandaslikAciklama", gercekKisiVatandaslik.VatandaslikAciklama);
                        else
                            cmd.Parameters.Add("@VatandaslikAciklama", DBNull.Value);

                        if (gercekKisiVatandaslik.Ulke != null)
                            cmd.Parameters.Add("@UlkeBilgiID", gercekKisiVatandaslik.Ulke.UlkeBilgiID);
                        else
                            cmd.Parameters.Add("@UlkeBilgiID", DBNull.Value);

                        if (gercekKisiVatandaslik.MusadereKarariVarmi != null)
                            cmd.Parameters.Add("@MusadereKarariVarMi", gercekKisiVatandaslik.MusadereKarariVarmi);
                        else
                            cmd.Parameters.Add("@MusadereKarariVarMi", DBNull.Value);

                        if (gercekKisiVatandaslik.AktifMi != null)
                            cmd.Parameters.Add("@AktifMi", (byte)gercekKisiVatandaslik.AktifMi);
                        else
                            cmd.Parameters.Add("@AktifMi", DBNull.Value);

                        cmd.Connection = con;
                        cmd.Transaction = transaction;
                        cmd.ExecuteScalar();
                        transaction.Commit();
                        sonuc = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        sonuc = false;
                        using (ExceptionLogDao el = new ExceptionLogDao())
                        {
                            el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                        }
                    }
                    finally
                    {
                        con.Close();
                        con.Dispose();
                        cmd.Dispose();
                    }
                    return sonuc;
                }
            }
        }

        public bool GercekKisiVatandaslikKayitliMi(decimal gercekKisiVatandaslikID)
        {
            bool sonuc = false;
            try
            {
                using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
                {
                    string sql = string.Format(@"SELECT * FROM GercekKisiVatandaslik with(nolock) WHERE GercekKisiVatandaslikID = {0} Order by KayitTarih Desc ", gercekKisiVatandaslikID);
                    using (SqlCommand cmd = new SqlCommand(sql))
                    {
                        using (SqlDataAdapter sda = new SqlDataAdapter())
                        {
                            cmd.Connection = con;
                            sda.SelectCommand = cmd;
                            cmd.CommandTimeout = 60000;
                            DataTable dt = new DataTable();
                            sda.Fill(dt);
                            if (dt.Rows.Count >= 1)
                                sonuc = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return sonuc;
        }

        public void Dispose()
        {
        }
    }
}
